﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.DAL;

namespace Libreria.RFID.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer,"RegistrosDeObjeto")]
    public class RegistroDeObjeto
    {
        //Atributo de Abstracción
        private MOR accesoADatos;

        private int? identificador;
        private int? codigoobjeto;
        private int? codigopersona;
        private DateTime fechaentrada;
        
        private DateTime fechasalida;
        private Boolean? ultimo;

        

        //Constructor de la clase
        public RegistroDeObjeto()
        {
        }
        public RegistroDeObjeto(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        //Encapsulamiento y mapeo de atributos
        [Tipo(Tipo.TiposSQLServer._int,"identificador",true,true)]
        public int? Identificador
        {
            get { return identificador; }
            set { identificador = value; }
        }

        [Tipo(Tipo.TiposSQLServer._int,"codigoObjeto")]
        public int? Codigoobjeto
        {
            get { return codigoobjeto; }
            set { codigoobjeto = value; }
        }
        [Tipo(Tipo.TiposSQLServer._int, "codigoPersona")]
        public int? Codigopersona
        {
            get { return codigopersona; }
            set { codigopersona = value; }
        }

        [Tipo(Tipo.TiposSQLServer._datetime,"fechaentrada")]
        public DateTime Fechaentrada
        {
            get { return fechaentrada; }
            set { fechaentrada = value; }
        }

        [Tipo(Tipo.TiposSQLServer._datetime,"fechasalida")]
        public DateTime Fechasalida
        {
            get { return fechasalida; }
            set { fechasalida = value; }
        }

        [Tipo(Tipo.TiposSQLServer._bit,"ultimo")]
        public Boolean? Ultimo
        {
            get { return ultimo; }
            set { ultimo = value; }
        }

        //Métodos de abstracción de datos 
        public void crear()
        {
            this.identificador = this.accesoADatos.crearRegistro(this);
        }
         public List<RegistroDeObjeto> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<RegistroDeObjeto> resultado = new List<RegistroDeObjeto>();
            foreach (Object registro in registros)
            {
                resultado.Add((RegistroDeObjeto)registro);
            }
            return resultado;
        }
        public RegistroDeObjeto consultarPorCodigo(Int32 codigo)
        {
            this.identificador = Identificador;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            RegistroDeObjeto resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (RegistroDeObjeto)registros[0];
                }
            }
            return resultado;
        }
         public void actualizar()
        {
            this.accesoADatos.actualizarRegistroConNulos(this);
        }
         public void actualizarSinLLavePrimaria()
         {
             this.accesoADatos.actualizarRegistroConNulos(this, true);
         }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }

    }
}
